<?php
// 应用公共函数
use think\Cache;

// 功能：通过ID获取用户信息
function userinfobyid($id){
	$userdata=db('user')->where(array('id'=>$id))->find();
	if(!$userdata) return false;
    return $userdata;
}

// 功能：通过用户名获取用户信息
function userinfobyuname($uname){
	$userdata=db('user')->where(array('uname'=>$uname))->find();
	if(!$userdata) return false;
    return $userdata;
}

// 功能：获取系统参数
function setting($str=""){
    if($str){
        return db('setting')->where('key',$str)->value('val');
    }else{
        $setting=[];
        $ret=db('setting')->select();
        foreach ($ret as $set) {
            $setting[$set['key']]=$set['val'];
        }
        return $setting;
    }
}

//功能：过滤数据
function guolv($data){
    //去前后空格
    if(!is_array($data)){
        return trim($data);
    }else{
        foreach ($data as $key => $value) {
            $data[$key]=guolv($value);
        }
        return $data;
    }
}

/*资金记录流水
$table,表：ome/kuang/quan/jifen
$uname,用户名
$type,类型：jing=静态/dong=动态/mkj=买矿机/skj=升矿机/sxf=手续费/zhuan=转账
$typeb,辅助类型：静态时1=回本前2=回本后/
$mqian,变动前额度：数字
$money,变动额度：数字
$note,备注信息
$oid,相关ID
$oname,相关用户名
$oinfo,相关信息
*/
function mylog($table,$uname,$type,$typeb="",$mqian,$money,$note="",$oid="",$oname="",$oinfo=""){
    $data['uname']=$uname;
    $data['type']=$type;
    $data['typeb']=$typeb;
    $data['mqian']=$mqian;
    $data['money']=$money;
    $data['mhou']=$mqian+$money;
    $data['note']=$note;
    $data['time']=time();
    $data['oid']=$oid;
    $data['oname']=$oname;
    $data['oinfo']=$oinfo;
    $logid=db('log'.$table)->insertGetId($data);
    return $logid;
}

//发送get/post请求
function http($url,$params=[],$method='GET',$timeout=10){
    // return $url.'?'.http_build_query($params);
    
    if(!is_array($params) || empty($params)){
        $params = [];
    }
    if(strtoupper($method)=='POST'){
        $opts['http'] = [
            'method' => 'POST', 
            'timeout' => $timeout,    //$timeout秒超时
            'header' => 'Content-type:application/x-www-form-urlencoded',
            'content' => http_build_query($params)
        ];
    }else{
        $opts['http'] = [
            'method' => 'GET', 
            'timeout' => $timeout
        ];
        $url=$url.'?'.http_build_query($params);
    }
    $ret = @file_get_contents($url, false, stream_context_create($opts));
    return $ret;
}
/*
非常给力的authcode加密函数，Discuz!经典代码
函数authcode($string, $operation, $key, $expiry)中的$string：字符串，明文或密文；$operation：DECODE表示解密，其它表示加密；$key：密匙；$expiry：密文有效期。
$str = 'abcdef'; 
$key = 'www.helloweba.com'; 
echo authcode($str,'ENCODE',$key,0); //加密 
$str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; 
echo authcode($str,'DECODE',$key,0); //解密
 */
function authcode($string, $operation = 'DECODE', $key = 'oMe', $expiry = 0) {   
    // 动态密匙长度，相同的明文会生成不同密文就是依靠动态密匙   
    $ckey_length = 4;   
       
    // 密匙   
    $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);   
       
    // 密匙a会参与加解密   
    $keya = md5(substr($key, 0, 16));   
    // 密匙b会用来做数据完整性验证   
    $keyb = md5(substr($key, 16, 16));   
    // 密匙c用于变化生成的密文   
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';   
    // 参与运算的密匙   
    $cryptkey = $keya.md5($keya.$keyc);   
    $key_length = strlen($cryptkey);   
    // 明文，前10位用来保存时间戳，解密时验证数据有效性，10到26位用来保存$keyb(密匙b)， 
    //解密时会通过这个密匙验证数据完整性   
    // 如果是解码的话，会从第$ckey_length位开始，因为密文前$ckey_length位保存 动态密匙，以保证解密正确   
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;   
    $string_length = strlen($string);   
    $result = '';   
    $box = range(0, 255);   
    $rndkey = array();   
    // 产生密匙簿   
    for($i = 0; $i <= 255; $i++) {   
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);   
    }   
    // 用固定的算法，打乱密匙簿，增加随机性，好像很复杂，实际上对并不会增加密文的强度   
    for($j = $i = 0; $i < 256; $i++) {   
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;   
        $tmp = $box[$i];   
        $box[$i] = $box[$j];   
        $box[$j] = $tmp;   
    }   
    // 核心加解密部分   
    for($a = $j = $i = 0; $i < $string_length; $i++) {   
        $a = ($a + 1) % 256;   
        $j = ($j + $box[$a]) % 256;   
        $tmp = $box[$a];   
        $box[$a] = $box[$j];   
        $box[$j] = $tmp;   
        // 从密匙簿得出密匙进行异或，再转成字符   
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));   
    }   
    if($operation == 'DECODE') {  
        // 验证数据有效性，请看未加密明文的格式   
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {   
            return substr($result, 26);   
        } else {   
            return '';   
        }   
    } else {   
        // 把动态密匙保存在密文里，这也是为什么同样的明文，生产不同密文后能解密的原因   
        // 因为加密后的密文可能是一些特殊字符，复制过程可能会丢失，所以用base64编码   
        return $keyc.str_replace('=', '', base64_encode($result));   
    }   
}
/*
 * 加密解密类
 * 该算法仅支持加密数字。比较适用于数据库中id字段的加密解密，以及根据数字显示url的加密。
 * @加密原则 标记长度 + 补位 + 数字替换
 * @加密步骤：
 * 将a-z,A-Z,0-9 62个字符打乱，取前M(数字最大的位数)位作为 标记长度字符串，取第M+1 到第M+10位为数字替换字符串，剩余的为补位字符串
 * 1.计算数字长度n,取乱码的第n位作为标记长度。
 * 2.计算补位的长度，加密串的长度N -1 - n 为补位的长度。根据指定的算法得到补位字符串。
 * 3.根据数字替换字符串替换数字，得到数字加密字符串。
 * 标记长度字符 + 补位字符串 + 数字加密字符串 = 加密串
 */
function authcodenum($str,$mode="decode",$length="9"){  //KM++纯数字的加密解密
    $strbase = "T7aPdkK3ziZe6OfStvru9oEcGx28sgNWQY4FlVqH1LyDhCUAjX0nJBmpbI5MRw";
    $key = 2543.5415412812;
    $length = $length;
    $codelen = substr($strbase,0,$length);
    $codenums = substr($strbase,$length,10);
    $codeext = substr($strbase,$length + 10);
    if($mode=="decode"){
        $code=$str;
        $begin = substr($code,0,1);
        $rtn = '';
        $len = strpos($codelen,$begin);
        if($len!== false){
          $len++;
          $arrnums = str_split(substr($code,-$len));
          foreach ($arrnums as $v) {
            $rtn .= strpos($codenums,$v);
          }
        }
        return $rtn;
    }else{
        $nums=$str;
        $rtn = "";
        $numslen = strlen($nums);
        //密文第一位标记数字的长度
        $begin = substr($codelen,$numslen - 1,1);
        //密文的扩展位
        $extlen = $length - $numslen - 1;
        $temp = str_replace('.', '', $nums / $key);
        $temp = substr($temp,-$extlen);
        $arrextTemp = str_split($codeext);
        $arrext = str_split($temp);
        foreach ($arrext as $v) {
          $rtn .= $arrextTemp[$v];
        }
        $arrnumsTemp = str_split($codenums);
        $arrnums = str_split($nums);
        foreach ($arrnums as $v) {
          $rtn .= $arrnumsTemp[$v];
        }
        return $begin.$rtn;
    }
}
//生成随机密码
function getrandpass($length = 6){
    $password = '';
    //将你想要的字符添加到下面字符串中，默认是数字0-9和26个英文字母
    $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    $char_len = strlen($chars); 
    for($i=0;$i<$length;$i++){
    $loop = mt_rand(0, ($char_len-1));
    //将这个字符串当作一个数组，随机取出一个字符，并循环拼接成你需要的位数
    $password .= $chars[$loop];
    }
    return $password;
}
//用户A在用户B的什么位置
//返回：shang/xia/pang 上面/下面/旁边
function chickusposition($userinfoA,$userinfoB){
    if(in_array($userinfoA['id'], explode(",",$userinfoB['tpath']))){
        return 'shang';
    }elseif(in_array($userinfoB['id'], explode(",",$userinfoA['tpath']))){
        return 'xia';
    }else{
        return 'pang';
    }
}
//生成短域名
function short_url($long_url) {
    $result = file_get_contents(config('short_url').$long_url);  
    $json = json_decode($result);  
    if (isset($json->error) || !isset($json[0]->url_short) || $json[0]->url_short ==''){
        return false;  
    }else{
        return $json[0]->url_short;  
    }
}
//本地图片转base64 不支持远程图片
function base64EncodeImage($img){
    // $image_info = getimagesize($img);
    //print_r($image_info);echo '<hr>';
    $image_data = fread(fopen($img, 'r'), filesize($img));
    //print_r($image_data);
    $base64_image = base64_encode($image_data);
    //echo '<img src="' . $base64_image . '" />';
    return $base64_image;
}
//社区成员统计
//$hz_uid=要统计的会长uid，$shequ_uids=社区会长uid集合
function shequchengyuan($hz_uid,$shequ_uids=''){
    //所有社长的uids
    if(!$shequ_uids){
        $shequ_uids = db('shequ')->where('zt',1)->column('uid');
    }
    //目标伞下所有成员（不含自己）
    $this_shequ_uids = db('user')->where("FIND_IN_SET({$hz_uid},tpath)")->column('id');
    //已排除的ids 阻止foreach运行
    $other_uids=[];
    foreach ($this_shequ_uids as $val) {
        if(!in_array($val,$other_uids) && in_array($val,$shequ_uids)){
            //伞下某社区成员（不含自己）
            $this_shequ_uids_next = db('user')->where("FIND_IN_SET({$val},tpath)")->column('id');
            //伞下某社区成员（含自己）
            array_unshift($this_shequ_uids_next,$val);
            //
            $other_uids=array_merge($other_uids,$this_shequ_uids_next);
            //目标伞下成员去除某社区
            $this_shequ_uids = array_diff($this_shequ_uids,$this_shequ_uids_next);
        }
    }
    array_unshift($this_shequ_uids,$hz_uid);
    return $this_shequ_uids;
}
//寻找uid的社区社长 $type=arr/zhezhang
function find_shequ($type='arr',$uid){
    $shequ_uids=db('shequ')->where('zt',1)->column('uid');  //所有社长的uids
    $userinfo = userinfobyid($uid);
    if($userinfo){
        if($userinfo['issq']){  //自己是社长
            $shequ = db('shequ')->where('uid',$uid)->find();
        }else{  //不是社长
            //寻找最近社区
            $tpath=explode(",",$userinfo['tpath']);
            $tpath=array_reverse($tpath);   //反序
            foreach ($tpath as $val) {
                if(in_array($val,$shequ_uids)){
                    $shequ = db('shequ')->where('uid',$val)->find();
                    break;
                }
            }
        }
        if(isset($shequ) && $shequ){
            if($type=='arr'){
                return $shequ;
            }else{
                return $shequ['uname'];
            }
        }
    }
    return '';
}
//改变用户可提链OME：OME1
//$userinfo用户OME[变动前]信息,$money正负额度,$type='tilian/zhuan/yajin/cuiqu/other'
function ome1($userinfo,$money,$type='other'){
    $ome1=$userinfo['ome1'];    //可提链额度
    $ome0=$userinfo['ome']-$userinfo['ome1'];   //不可提链额度
    if($type=='tilian'){
        //提链只有-，-OME-OME1
        if($money<0){
            return db('user')->where('id',$userinfo['id'])->setInc('ome1',$money);
        }else{
            return false;
        }
    }elseif($type=='zhuan' || $type=='yajin' || $type=='cuiqu'){
        if($money>0){
            //转入+/提取押金+/萃取+ ——为不可提OME
            return true;
        }else{
            //转出 优先用ome0，不够则-ome1
            if($ome0+$money>=0){
                return true;
            }else{
                return db('user')->where('id',$userinfo['id'])->setInc('ome1',($ome0+$money));
            }
        }
    }elseif($type=='other'){
        if($money>0){
            //增加 +OME1
            return db('user')->where('id',$userinfo['id'])->setInc('ome1',$money);
        }else{
            //减少 优先用ome0，不够则-ome1
            if($ome0+$money>=0){
                return true;
            }else{
                return db('user')->where('id',$userinfo['id'])->setInc('ome1',($ome0+$money));
            }
        }
    }else{
        return false;
    }
}
//返回性别中文
function sex($num){
    $arr=['未知','男','女','保密'];
    return $arr[$num];
}

//发送短信验证码 $phone：手机号，$type：验证码类型
function sendsms($phone,$type='default',$is_code = 1) {
    //手机号检测
    if(!preg_match("/^[1][3|4|5|7|8|9][0-9]{9}$/",$phone)){
        return ['zt'=>'0','msg'=>'手机号码不正确'];
    }
    //随机生成验证码
    $code = rand(111111,999999);

    //短信模板
    $TemplateCode = config('aliyundysms')['TemplateCode'][$type];
    if(!$TemplateCode){
        $TemplateCode = config('aliyundysms')['TemplateCode']['default'];
    }

    //引入签名插件
    Vendor('aliyundysms.SignatureHelper');
    //传入配置参数
    $aliyundysms = config('aliyundysms');

    $params = array ();
    // *** 需用户填写部分 ***
    // fixme 必填：是否启用https
    $security = false;

    // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
    $accessKeyId = $aliyundysms['accessKeyId'];
    $accessKeySecret = $aliyundysms['accessKeySecret'];

    // fixme 必填: 短信接收号码
    $params["PhoneNumbers"] = $phone;

    // fixme 必填: 短信签名，应严格按"签名名称"填写，请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
    $params["SignName"] = $aliyundysms['SignName'];
    if($is_code==2){//如果是短信则签名用新的
        $params["SignName"] = $aliyundysms['NewSignName'];
    }

    // fixme 必填: 短信模板Code，应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
    $params["TemplateCode"] = $TemplateCode;

    // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
    $params['TemplateParam'] = Array (
        "code" => $code
    );

    // fixme 可选: 设置发送短信流水号
    // $params['OutId'] = "12345";

    // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下，无特殊需求用户请忽略此字段
    // $params['SmsUpExtendCode'] = "1234567";

    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
        $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
    }

    // 初始化SignatureHelper实例用于设置参数，签名以及发送请求
    $helper = new \SignatureHelper();

    // 此处可能会抛出异常，注意catch
    $content = $helper->request(
        $accessKeyId,
        $accessKeySecret,
        "dysmsapi.aliyuncs.com",
        array_merge($params, array(
            "RegionId" => "cn-hangzhou",
            "Action" => "SendSms",
            "Version" => "2017-05-25",
        )),
        $security
    );
    // dump($content);
    // object(stdClass)#24 (3) {
    //   ["Message"] => string(30) "触发小时级流控Permits:5"
    //   ["RequestId"] => string(36) "4FEA58B9-03E4-4E45-A95C-AA20CE4056A7"
    //   ["Code"] => string(26) "isv.BUSINESS_LIMIT_CONTROL"
    // }
    // $ret = json_decode(json_encode($content),true);
    if($content->Code == 'OK'){
        if($is_code==2){
            return ['zt'=>'1','msg'=>'发送成功'];
        }
        //删掉以前的
        db('smscode')->where('uname',$phone)->delete();
        //写入数据库
        $ret = db('smscode')->insertGetId([
            'uname'=>$phone,
            'code'=>$code,
            'sendtime'=>time(),
            'msg'=>$content->Message,
            'type'=>$type
        ]);
        if($ret){
            return ['zt'=>'1','msg'=>'发送成功'];
        }else{
            return ['zt'=>'0','msg'=>'验证码写入失败'];
        }
    }else{
        // return ['zt'=>'0','msg'=>json_decode(json_encode($content),true)];
        return ['zt'=>'0','msg'=>$content->Message];
    }
}

//存入临时名字文件》等比压缩》存正式名字文件》删除临时名字文件》检查正式名字文件是否生成成功
//uploadimg(request()->file('image'),'image/shiming','15555555553_sfz1','1000')
//返回值=['zt'=>false,'error'=>$file->getError()] || ['zt'=>true,'sql_path'=>'image/shiming/18888888888.jpg']
use think\File;
function uploadimg($file,$save_path,$save_name,$max_width=500){
    // 存入临时名字文件》
    $info = $file->validate(['size'=>10485760,'ext'=>'jpg,png,gif,bmp,jpeg,ico'])->move(ROOT_PATH.'public/'.$save_path.'/tmp',$save_name);  //size字节 10M = 10*1024*1024
    if(!$info){
        return ['zt'=>false,'error'=>$file->getError()];
    }
    // 等比压缩》存正式名字文件》
    $img_name = $info->getSaveName();   // 15555555553_sfz1.jpg
    $tmp_path_name = $save_path.'/tmp/'.$img_name;   // image/shiming/tmp/15555555553_sfz1.jpg
    $img = \think\Image::open($tmp_path_name);
    $width = $img->width(); 
    $height = $img->height(); 
    if($width>$max_width){
        $height = $height*$max_width/$width;
        $width = $max_width;
    }
    $type = $img->type(); 
    $save_path_name = $save_path.'/'.$img_name;
    $img->thumb($width, $height, \think\Image::THUMB_SCALING)->save($save_path_name);
    // 删除临时名字文件》。。？删不掉 文件被占用
    // 提示 unlink(D:\www\ome\public\image\shiming\tmp\15555555553_sfz1.jpg): Resource temporarily unavailable
    // $path = ROOT_PATH.str_replace("/","\\",'public/'.$tmp_path_name);
    // if(!is_file($path) || !unlink($path)){    //D:\www\ome\public\image\shiming\tmp\15555555553_sfz1.jpg
    //     //计入数据库错误日志
    //     $err['url'] = '/common/uploadimg:453';
    //     $err['time'] = time();
    //     $err['note1'] = '图片上传删除原图失败';
    //     $err['note2'] = $tmp_path_name;
    //     db('error')->insertGetId($err);
    // }
    // 检查正式名字文件是否生成成功
    //if(file_exists(ROOT_PATH.str_replace("/","\\",'public/'.$save_path_name))){ //D:\www\ome\public\image\shiming\15555555553_sfz1.jpg
    if(file_exists(ROOT_PATH.'public/'.$save_path_name)){ //D:\www\ome\public\image\shiming\15555555553_sfz1.jpg
        unlink($tmp_path_name);
        return ['zt'=>true,'sql_path'=>$save_path.'/'.$img_name];
    }else{
        return ['zt'=>false,'error'=>'图片上传失败'];
    }
}

//根据时间戳返回显示的大概时间
function time_to_show($time){
    $diff = time() - $time;
    if($diff<=60){
        return $diff.'秒';
    }elseif(round($diff/60)<=60){
        return round($diff/60).'分';
    }elseif(round($diff/60/60)<=24){
        return round($diff/60/60).'时';
    }else{
        return round($diff/60/60/24).'天';
    }
}
//统计人数
function count_user($by,$val){
    return db('user')->where($by,$val)->count();
}

// 订单生成
function orderSn(){
    $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
    return $yCode[intval(date('Y')) - 2011] . date('d') . substr(time(), -5) . sprintf('%02d', rand(0, 99));
}


// 火币官网接口调用
function huobingapi()
{
    return config('huobiapi')['url'];
}

// eth官网接口调用
function ethapi()
{   
    return config('ethapi')['url'].config('ethapi')['apikey'];
}

// btc(脑加科技)接口调用
function cbtapi()
{   
    return config('cbtapi')['url'];
}

// 货币类型
function currency(){
    $lists = ['BTC' => 'btcusdt', 'ETH' => 'ethusdt', 'USDT' => 'usdthusd', 'HT' => 'htusdt', 'EOS' => 'eosusdt'];
    return $lists;
}

//  合约地址
function contract(){
    $contract[] = ['type' => 'IDC', 'symbol' => '', 'contractaddress' => '0x8eB85017f1e1e2cA7E64a5943750224E6225D9ff', 'unit' => '8' ,'img' => 'http://'.$_SERVER['SERVER_NAME'].'/image/wallet/IDC.png'];
    $contract[] = ['type' => 'USDT', 'symbol' => 'usdthusd', 'contractaddress' => '0xdac17f958d2ee523a2206206994597c13d831ec7', 'unit' => '6' , 'img' => 'http://'.$_SERVER['SERVER_NAME'].'/image/wallet/USDT.png'];
    $contract[] = ['type' => 'ETH', 'symbol' => 'ethusdt', 'contractaddress' => '', 'unit' => '18', 'img' => 'http://'.$_SERVER['SERVER_NAME'].'/image/wallet/ETH.png'];

    return $contract;
}

// 转账接口
function transfer($type, $params){

    $list = http_build_query($params);
    if ($type == 'eth') {
        $url = cbtapi().'transferaccounts?'.$list;
    }else{
        $url = cbtapi().'transfer?'.$list;
    }

    $data = file_get_contents($url);
    $data = json_decode($data,true);
    return $data;
}

// 创建钱包（公钥私钥）
function wallet_api(){

    $url = cbtapi().'CreateEtherWallet';

    $data = file_get_contents($url);
    $data = json_decode($data,true);
    return $data;
}

// 美元转人民币汇率接口
function rmbrate(){
    if (Cache::get('rmbrate')) {
        $data = Cache::get('rmbrate');
    }else{
        $data = db('interface_cache')->where('type','汇率')->value('json');
        Cache::set('rmbrate', $data, 3600 * 24);
    }
    return $data;
}


// 查询货币涨幅价格
function moneyprice(){
    if (Cache::get('moneyprice')) {
        $data = Cache::get('moneyprice');
    }else{
        $data = db('interface_cache')->where('type','行情')->value('json');
        Cache::set('moneyprice', $data,  300);
    }

    $data = json_decode($data,true);
    return $data;
}

// 查询账户余额
function getbalance($type = 'ETH', $params = array()){

    if ($type == 'ETH') {
        $url = ethapi().'module=account&action=balance&tag=latest&address='.$params['address'];

    }else{
        $list = http_build_query($params);
        $url = ethapi().'module=account&action=tokenbalance&tag=latest&'.$list;
    }

    $data = file_get_contents($url);
    $data = json_decode($data,true);
    if($data['status'] != 1){
        apifasong(['zt' => -1, 'msg' => '请求超时']);
    }
    $balance = bcdiv($data['result'],pow(10,$params['unit']), 8);
    return $balance;
}

// 天然气价格
function eth_gasPrice($type = ''){

    // if (Cache::get('eth_gasPrice')) {
    //     $eth_gasPrice = Cache::get('eth_gasPrice');
    // }else{
    //     $url = ethapi().'module=proxy&action=eth_gasPrice';
    //     $eth_gasPrice = file_get_contents($url);
    //     $eth_gasPrice = json_decode($eth_gasPrice,true);
    //     Cache::set('eth_gasPrice', $eth_gasPrice, 120);
    // }
    // $result  = hexdec($eth_gasPrice['result']);
    // $result =  bcdiv($result * 60000 , pow(10,18),6);
    // 默认10Gwei 步数60000
    $gas = 60000;
    if(strtoupper($type) == 'ETH') $gas = 21000; 
    $result = round(0.00000001 * $gas,6);
    return $result;
}

// 记录
function wallet_record($type, $params){

    $data = array();
    $list = http_build_query($params);
    if ($type == 'ETH') {
        $url = cbtapi().'transactions/?'.$list; //eth
    }else{
        $url = cbtapi().'erctransactions?'.$list; // REC20代币
       
    }

    $wallet_record = file_get_contents($url);
    $wallet_record = json_decode($wallet_record,true);

    return $wallet_record;
    
}

// 私钥公钥获取
function wallet_sql($uid, $key){
    $wallet = db('wallet')->field(true)->where(array('uid' => $uid))->value($key);
    return $wallet;
}


// 生成二维码调用使用
function getcode($contract)
{   
    // 参数存入
    $value = $contract;
    // header('Content-Type: image/png');
    vendor("phpqrcode.phpqrcode");//引入工具包
    $qRcode = new \QRcode();
    // 判断是否有这个文件夹  没有的话就创建一个
    if(!is_dir("code")){
    // 创建文件加
    mkdir("code");
    }
    //设置二维码图片名称，以及存放的路径
    $filename = 'image/code/'.time().rand(10000,9999999).'.png';
    //使用类库生成二维码
    \QRcode::png($value,$filename , 'L', 5, 2);
    // $image_data = chunk_split(base64_encode(fread(fopen($filename, 'r'), filesize($filename))));
    return $filename;
}


//淘宝接口归属地查询
function get_ip_city($ip)
{
    $url = 'https://whois.pconline.com.cn/ipJson.jsp?ip='.$ip;
    $location =  file_get_contents($url);
    //转码
    $location = mb_convert_encoding($location, 'utf-8','GB2312');
    //截取{}中的字符串
    $location = substr($location, strlen('({')+strpos($location, '({'),(strlen($location) - strpos($location, '})'))*(-1));
   //将截取的字符串$location中的‘，’替换成‘&’   将字符串中的‘：‘替换成‘=’
    $location = str_replace('"',"",str_replace(":","=",str_replace(",","&",$location)));
    //php内置函数，将处理成类似于url参数的格式的字符串  转换成数组
    parse_str($location,$ip_location);
    return $ip_location['pro'].$ip_location['city'];
}


